#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

/*
 * 1、disconnect()函数
 * 使用disconnect()接口可以断开信号和槽的连接
 * disconnect()和connect()的使用方式非常类似
 * 一般来说，将信号和槽函数连接起来就可以了，不必将其断开连接，所以disconnect()的使用非常少
 * 主动断开信号和槽之间的连接，往往是把信号重新绑定到另一个槽函数上
*/

/*
 * 2、定义槽函数时，也可以使用lambda表达式
 * 对于lambda表达式，本质就是一个匿名函数，主要应用于回调函数中，一次性使用
 * lambda表达式语法格式： [捕获变量1，捕获变量2](参数1，参数2){函数体}
 * lambda表达式就是一个回调函数
 * 这个函数，无法直接获取到上层作用域中的变量，但是，可以使用[捕获变量]来捕获外层作用域中的变量
 * 捕获时，可以使用[=]这个符号来捕获上层作用域中所有变量，来供lambda表达式的函数体使用
 * 如果槽函数比较简单，而且是一次性使用的，就可以使用lambda表达式
 *
 * 使用lambda表达式时，要确认捕获到lambda内部的变量是有意义的
 * 回调函数执行时机是不确定的，程序并不知道用户什么时候点击按钮触发信号调用lambda表达式函数
 * 无论用户何时点击按钮，捕获的变量都可以正常使用
 *
 * 在Qt中，new出来的变量都是挂到对象树上，生命周期都是跟随整个窗口，即窗口关闭时，挂在对象树上的控件才会被销毁
 * 窗口的生命周期是在main函数结束时，才会被释放
 * 所以，new出来的控件，同窗口一样，在何时都可以被使用
 *
 * lambda表达式的捕获方式
 * [=]：捕获上层作用域中所有的变量。以传递值(拷贝)的方式
 * [&]：捕获上层作用域中所有变量。以引用(起别名)的方式
 * 捕获到的变量就是控件对象的指针或引用
 * 在Qt中，常用[=]
 * 指针变量按照值传递或者引用传递，都无所谓
 * 如果按照引用传递，还得更关注这个引用变量本身的生命周期
 *
 * lambda表达式是在C++11中被引入的，对于Qt5及其更高版本，默认使用C++11来进行编译
 * 如果使用Qt4或者之前的版本，就需要在.pro文件中，加上C++11的编译选项
 * CONFIG=C++11---这样的宏
 *
*/

























